package com.ipfsemc.ipfsemc.wx;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.UUID;

/**
 * @author: zzx
 * @date: 2018/10/23 9:20
 * @description: 字符串工具类
 */
@Component
public class StringUtil {

    Logger log = LogManager.getLogger(StringUtil.class);        /* 日志记录 */

    /**
     * 判断多个字符串是否为空和""，任意一个为空和""返回true
     *
     * @param s
     * @return
     */
    public boolean isEmpty(String... s) {
        for (String str : s) {
            if (null == str || str.trim().equals("")) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断两个字符串是否相等 如果都为null则判断为相等,一个为null另一个not null则判断不相等 否则如果s1=s2则相等
     *
     * @param s1
     * @param s2
     * @return
     */
    public boolean equals(String s1, String s2) {
        if (isEmpty(s1) && isEmpty(s2)) {
            return true;
        } else if (!isEmpty(s1) && !isEmpty(s2)) {
            return s1.equals(s2);
        }
        return false;
    }
    /**
     * 生成uuid
     *
     * @return
     */
    public String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }


    /**
     * 格式化金额（获取配置计算金额时）
     *
     * @param money
     * @return
     */
    public String moneyFormat(double money) {
        DecimalFormat df = new DecimalFormat("0.00");
        String s = df.format(money);
        return s;
    }

    /**
     * 将人民币的单位从元转为分
     *
     * @param money 被格式化好的金额(调用moneyFormat方法进行格式化)
     * @return
     */
    public String YuanToFen(String money) {
        int i = (int) (Double.valueOf(money) * 100);
        return String.valueOf(i);
    }

    /**
     * 将字符串转成int[]
     *
     * @param ids
     * @return
     */
    public int[] StringToInts(String ids) {
        String[] split = ids.split(",");
        return StringsToInts(split);
    }

    /**
     * 将字符数组转换成int数组
     *
     * @param strings
     * @return
     */
    public int[] StringsToInts(String[] strings) {
        int[] result = new int[strings.length];
        for (int i = 0; i < result.length; i++) {
            result[i] = Integer.parseInt(strings[i]);
        }
        return result;
    }

    /**
     * 使用java eval 计算字符串表达式
     *
     * @param str 字符串表达式
     * @return double 类型的结果
     */
    public static Double eval(String str) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine se = manager.getEngineByName("js");
        Double result = null;

        try {
            result = Double.valueOf(se.eval(str).toString());
            if (result == null) {
                result = new Double(0);
            }
        } catch (ScriptException e) {
            e.printStackTrace();
        }
        return result;
    }

}
